package controller

import (
	"github.com/gin-gonic/gin"
	"net/http"
	"webdemo/src/gin/model"
	"webdemo/src/gin/model/dto"
	"webdemo/src/gin/service"
)

var userService = &service.UserService{}

//http://localhost:8080/user/register
func UserRegister(ctx *gin.Context) {
	// 获取参数

	// 1 Get请求 pwd=12zsdccv&username=qwe GET
	/*username := ctx.Query("username")
	pwd := ctx.Query("pwd")*/

	// RESTFUL
	/*key := ctx.Param("key")
	value := ctx.Param("value")*/

	// 2 POST --formdata
	/*username := ctx.PostForm("username")
	pwd := ctx.PostForm("pwd")*/
	// 3 Json格式
	/*{
		"id":1,
		"username":"username",
		"pwd":"123313"
	}*/
	user := &model.User{}
	err := ctx.BindJSON(user)

	if err != nil {
		ctx.JSON(http.StatusPreconditionRequired, gin.H{
			"code": http.StatusPreconditionRequired,
			"msg":  err.Error(),
		})
		return
	}

	// 业务和数据库操作

	register := userService.Register(user)
	// 返回值
	ctx.JSON(200, register)
}

func UserInsert(ctx *gin.Context) {
	user := &model.User{}
	ctx.BindJSON(user)
	result := userService.Insert(user)
	// 返回值
	ctx.JSON(200, result)
}

func UserBatchInsert(ctx *gin.Context) {
	users := &[]model.User{}
	ctx.BindJSON(users)
	result := userService.BatchInsert(users)
	// 返回值
	ctx.JSON(200, result)
}

func QueryUserById(ctx *gin.Context) {
	id := ctx.Query("id")
	result := userService.QueryUserById(id)
	// 返回值
	ctx.JSON(200, result)
}

func QueryUserList(ctx *gin.Context) {
	userDTO := &dto.UserDTO{}
	ctx.BindJSON(userDTO)
	result := userService.QueryUserList(userDTO)
	// 返回值
	ctx.JSON(200, result)
}

func QueryAllUser(ctx *gin.Context) {
	result := userService.QueryAllUser()
	// 返回值
	ctx.JSON(200, result)
}

func Update(ctx *gin.Context) {
	user := &model.User{}
	ctx.BindJSON(user)
	result := userService.Update(user)
	// 返回值
	ctx.JSON(200, result)
}

func BatchUpdate(ctx *gin.Context) {
	user := &model.User{}
	ctx.BindJSON(user)
	result := userService.BatchUpdate(user)
	// 返回值
	ctx.JSON(200, result)
}

func Delete(ctx *gin.Context) {
	user := &model.User{}
	ctx.BindJSON(user)
	result := userService.Delete(user)
	// 返回值
	ctx.JSON(200, result)
}

// 执行原生sql
func ExeSql(ctx *gin.Context) {
	user := &model.User{}
	ctx.BindJSON(user)
	result := userService.ExeSql(user)
	// 返回值
	ctx.JSON(200, result)
}
